flowchart LR
subgraph Research[Research]
Publications[📚 Publications]
Data[📊 Statistical & Geo Data]
Code[💻 Source Code]
end
2025-10-15
flowchart LR
subgraph Research[Research]
Publications[📚 Publications]
Data[📊 Statistical & Geo Data]
Code[💻 Source Code]
end
flowchart LR
subgraph Research[Research]
Publications[📚 Publications]
Data[📊 Statistical & Geo Data]
Code[💻 Source Code]
end
subgraph Repositories
Omeka[(📁 omeka.unibe.ch)]
GitHub[(🐙 GitHub)]
end
%% Flows
Publications -- figures --> Omeka
Data -- visualizations --> Omeka
Code --> GitHub
flowchart LR
subgraph Research[Research]
Publications[📚 Publications]
Data[📊 Statistical & Geo Data]
Code[💻 Source Code]
end
subgraph Repositories[Repositories]
Omeka[(📁 omeka.unibe.ch)]
GitHub[(🐙 GitHub)]
end
subgraph PublicWeb[Public History Websites]
RDP[forschung.stadtgeschichtebasel.ch]
end
%% Flows
Publications -- figures --> Omeka
Data -- visualizations --> Omeka
Code --> GitHub
Omeka -- API --> RDP
GitHub -- static site generator --> RDP
flowchart LR
subgraph Research[Research]
Publications[📚 Publications]
Data[📊 Statistical & Geo Data]
Code[💻 Source Code]
end
subgraph Repositories[Repositories]
Omeka[(📁 omeka.unibe.ch)]
GitHub[(🐙 GitHub)]
end
subgraph PublicWeb[Public History Websites]
RDP[Research Data Platform<br>forschung.stadtgeschichtebasel.ch]
end
subgraph Archives[Long-term Archives]
Zenodo[(📦 Zenodo)]
DaSCH[(🏛️ DaSCH)]
UBBasel[(📚 University Library Basel)]
end
%% Flows
Publications -- figures --> Omeka
Publications -- books --> UBBasel
Publications -- other publications --> Zenodo
Data -- visualizations --> Omeka
Omeka -- API --> RDP
GitHub -- Static Site Generator --> RDP
Code --> GitHub
GitHub --> Zenodo
Omeka --> DaSCH
flowchart LR
subgraph Research[Research]
Publications[📚 Publications]
Data[📊 Statistical & Geo Data]
end
subgraph Repositories
Omeka[(📁 omeka.unibe.ch)]
end
subgraph Archives[Long-term Archives]
DaSCH[(🏛️ DaSCH)]
end
%% Flows
Publications -- figures --> Omeka
Data -- visualizations --> Omeka
Omeka --> DaSCH
classDiagram
%% Core Omeka S entities (reduced)
class Item {
o:id : int
o:is_public : bool
o:title : string
dcterms:identifier : string
dcterms:subject[*] : IconclassTerm
dcterms:temporal : Era
dcterms:language : ISO639
o:created : datetime
o:modified : datetime
}
class Media {
o:id : int
o:item_id : int
o:ingester : string
o:media_type : MIME
o:original_url : uri
o:sha256 : hash
dcterms:creator[*] : uri|text
dcterms:date : string~EDTF
dcterms:license : LicenseURI
dcterms:rights : text
}
class ItemSet {
o:id : int
o:label : string
}
%% Controlled vocabularies as types
class Era { <<type>> }
class MIME { <<type>> }
class LicenseURI { <<type>> }
class IconclassTerm {
<<external scheme>>
code : string
label : string
}
class ISO639 {
<<code>>
value : string
}
%% Relations and cardinalities
Item "1" o-- "0..*" Media : has media
Media "*" --> "1" Item : belongs to
Item "*" o-- "0..*" ItemSet : in set(s)
Item --> "0..*" IconclassTerm : subjects
Media --> "0..*" IconclassTerm : subjects
Item --> "1" Era : temporal
Media --> "1" Era : temporal
Media --> MIME : media_type
Media --> LicenseURI : license
Item --> ISO639 : language
classDiagram class Parent class Document class ResourceWithoutMedia class Image class SubjectList class LanguageList class TypeList class FormatList class TemporalList class LicenseList %% Core links to Parent object Document "0..1" --> "1" Parent : linkToParentObject ResourceWithoutMedia "0..1" --> "1" Parent : linkToParentObject Image "0..1" --> "1" Parent : linkToParentObject %% Value-list relations Parent "1" --> "1" TemporalList : hasTemporalList Parent "1" --> "0..*" SubjectList : hasSubjectList Parent "1" --> "0..1" LanguageList : hasLanguageList Document "1" --> "0..1" SubjectList : hasSubjectList Document "1" --> "0..1" TemporalList : hasTemporalList Document "1" --> "0..1" TypeList : hasTypeList Document "1" --> "0..1" FormatList : hasFormatList Document "1" --> "0..1" LanguageList : hasLanguageList Document "1" --> "0..1" LicenseList : hasLicenseList ResourceWithoutMedia "1" --> "0..1" SubjectList : hasSubjectList ResourceWithoutMedia "1" --> "0..1" TemporalList : hasTemporalList ResourceWithoutMedia "1" --> "0..1" TypeList : hasTypeList ResourceWithoutMedia "1" --> "0..1" FormatList : hasFormatList ResourceWithoutMedia "1" --> "0..1" LanguageList : hasLanguageList ResourceWithoutMedia "1" --> "0..1" LicenseList : hasLicenseList Image "1" --> "0..1" SubjectList : hasSubjectList Image "1" --> "0..1" TemporalList : hasTemporalList Image "1" --> "0..1" TypeList : hasTypeList Image "1" --> "0..1" FormatList : hasFormatList Image "1" --> "0..1" LanguageList : hasLanguageList Image "1" --> "0..1" LicenseList : hasLicenseList
Modeling approach:
Resource → Document / Image …), explicit value classes (TextValue, ListValue).Item, Media, ItemSet), Dublin Core–centric.Normalization & constraints:
hasTitle [1]).Hierarchy representation:
Parent class and linkToParentObject.ItemSet or Media to model relations.pydantic for schema validation as Omeka does not enforce strict validation| Omeka Property | DaSCH Property | Notes |
|---|---|---|
dcterms:title |
hasTitle |
Required in DaSCH (cardinality 1) |
dcterms:identifier |
hasIdentifier |
Not by DSP used for stable references |
dcterms:subject |
hasSubjectList |
Iconclass codes preserved |
dcterms:temporal |
hasTemporalList |
Era mapping required |
dcterms:creator |
hasCreatorList |
Multiple creators supported |
dcterms:license |
hasLicenseList |
License URIs validated |
| Media → Item | linkToParentObject |
Hierarchy explicitly modeled |
Our choice: Using dsp-tools for project setup and Rest API for ingestions/updates
pydantic schemas and subset testing prevented costly errors.